package com.xmall.product.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.xmall.define.dto.product.SkuInfoDto;
import com.xmall.define.dto.product.SkuQuantity;
import com.xmall.define.request.product.StockLockRequest;
import com.xmall.product.define.request.spu.SkuInfoRequest;
import com.xmall.product.define.request.spu.SkuQueryParams;
import com.xmall.product.entity.SkuInfo;

import java.util.List;
import java.util.Map;

/**
 * <p>
 * 商品sku信息 服务类
 * </p>
 *
 * @author xmall
 * @since 2023-11-02
 */
public interface ISkuInfoService extends IService<SkuInfo> {

    /**
     * 保存
     */
    void save(Long spuId, Map<Long, Long> attrIdMap, List<SkuInfoRequest> skuInfos);

    /**
     * 更新
     */
    void update(Long spuId, Map<Long, Long> attrIdMap, List<SkuInfoRequest> skuInfos);

    /**
     * 删除
     */
    void delete(Long spuId);

    /**
     * sku列表
     */
    List<SkuInfoDto> listWithCascade(SkuQueryParams params);

    void assemblySpuAndSkuImage(Long spuId, List<SkuInfoDto> skuInfoDtoList);

    /**
     * 库存检查（返回不通过的skuId列表）
     */
    List<Long> stockCheck(List<SkuQuantity> skuQuantityList);

    /**
     * 库存锁定
     */
    void stockLock(StockLockRequest request);

    /**
     * 库存扣减
     */
    void stockDeduct(Long orderId);

    /**
     * 锁定的库存恢复
     */
    void stockRevert(Long orderId);

}
